cmake_minimum_required(VERSION 3.27)
project(LEPF-demo)

# 解决生成可执行文件中文乱码问题
add_compile_options("/source-charset:utf-8")    # 解决编码导致的编译不通过
add_compile_options("/execution-charset:utf-8") # 解决程序运行时乱码
# 指定库文件的输出路径
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
# 指定可执行程序的输出路径
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
# debug编译添加d后缀
set(CMAKE_DEBUG_POSTFIX d)
# 以静态库的形式引入LEPF子模块
set(LEPF_BUILD_LIBRARY ON)
set(LEPF_BUILD_SHARED_LIBRARY OFF)
## 自定义变量
# LEPF库位置
set(LEPF_DIR ${CMAKE_CURRENT_SOURCE_DIR}/submodules/LEPF)
# QT bin目录
set(QT5_BIN_DIR "" CACHE PATH "Qt_DIR对应的bin目录")

# 引入CMake模块
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
include(MSVCFilters)

# 设置文件夹名称，用于在IDE中整理目标
set(CMAKE_FOLDER ${PROJECT_NAME})
add_executable(${PROJECT_NAME})

# 如果是MSVC[Visual Studio]构建项目，则启用文件夹
if(MSVC)
    # 启用目录结构
    set_property(GLOBAL PROPERTY USE_FOLDERS ON)
    # 如果当前用于构建CMake版本小于3.8，则使用传统的方式在VS中创建过滤器；否则使用TREE语法创建过滤器
    if(CMAKE_VERSION VERSION_LESS "3.8")
        GenerateMSVCFilters(${CMAKE_CURRENT_SOURCE_DIR}/src src)
    else()
        file(GLOB_RECURSE MODULE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.*)
        source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${MODULE_SRC})
    endif()
    # 设置Visual Studio调试运行的工作目录（使用相对路径文件时从此路径开始）
    set_property(TARGET ${PROJECT_NAME} PROPERTY VS_DEBUGGER_WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH}/$<IF:$<CONFIG:Debug>,Debug,Release>)
    # 设置Visual Studio调试环境
    set_property(TARGET ${PROJECT_NAME} PROPERTY VS_DEBUGGER_ENVIRONMENT "PATH=${QT5_BIN_DIR};%PATH%")
else()
    # 禁用目录结构
    set_property(GLOBAL PROPERTY USE_FOLDERS OFF)
endif()

# LEPF子模块
add_subdirectory(${LEPF_DIR} ${CMAKE_BINARY_DIR}/build-LEPF)

# LEPF头文件路径
include_directories(
    ${LEPF_DIR}/src         # 包含子模块的头文件
    src
)
# 项目代码
add_subdirectory(src)
target_link_directories(${PROJECT_NAME} PRIVATE ${CMAKE_BINARY_DIR}/lib)
target_link_libraries(${PROJECT_NAME} PRIVATE LEPF)
